/* user模块自己写  */
import { getTokenInfo, setTokenInfo, removeTokenInfo } from '@/utils/auth'
import { reqLogin, getUserInfo, reqGetUserDetailById } from '@/api/user'
import { resetRouter } from '@/router'
const state = {
  token: getTokenInfo() || null, // 用户token信息
  userInfo: {} // 个人信息
}
const mutations = {
  // 1.设置token到state中
  setToken(state, token) {
    state.token = token
    // 2. 存储到本地token
    setTokenInfo(token)
  },
  // 存储个人信息
  setUserInfo(state, userInfo) {
    state.userInfo = userInfo
  },
  // 清除token的mutation
  removeToken(state) {
    state.token = null
    // 清除本地token
    removeTokenInfo()
  },
  // 清除个人信息的mutation
  removeUserInfo(state) {
    state.userInfo = {}
  }
}
// action中的函数是返回的是promise
const actions = {
  // 登录的action
  /* login(context, form) {
    // 1. 发请求
    reqLogin(form).then(res => {
      console.log(res)
      // 2. 存token
      context.commit('setToken', res.data)
    })
    return 10
  } */
  async login(context, form) {
    // 1. 发请求
    const res = await reqLogin(form)
    // 2. 存token
    context.commit('setToken', res.data)
    // 3. 返回res, 供vue文件使用 去做提示处理
    return res
  },
  // 获取个人信息资料的action
  async getInfo(context) {
    const { data } = await getUserInfo() // 个人信息
    const { data: data2 } = await reqGetUserDetailById(data.userId) // 带头像工号入职转正日期..的对象
    // console.log(res2)
    const result = { ...data, ...data2 }
    context.commit('setUserInfo', result)
    return result
  },
  // 退出action
  logout({ commit }) {
    commit('removeToken') // 1.移除个人信息
    commit('removeUserInfo') // 2.移除token
    // 3. 重置路由 代码的健壮性
    resetRouter()
    // 4.移除动态路由 模块A中也可以提交模块B的mutation  { root: true }
    commit('permission/addAsyncRoutes', [], { root: true })
    // 5. 移除主题色 触发settings模块中 removeTheme 这个mutation
    commit('settings/removeTheme', null, { root: true })
  }
}
export default {
  state,
  mutations,
  actions,
  namespaced: true
}
